<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>18.多重继承中super的魅力</title>
</head>

<body>

</body>
<script>
  //多重继承中，因为始终传递的是当前对象this ，造成从 this 原型循环调用
  // 使用super关键字就可以解决这个问题,this和super区分开了
  // super 调用原型对象，this还是指向当前的对象

  let common = {
    show () {
      // this 还是指向实例化它的xj
      console.log("common.show" + this.name);
    }
  };
  let hd = {
    __proto__: common,
    name: "hd",
    show () {
      //  this.__proto__.show.call(this);
      return super.show();
    }
  };
  let xj = {
    __proto__: hd,
    name: "xj",
    show () {
      //  this.__proto__.show.call(this);
      super.show();
    },
    // super 只能在方法中调用 ，函数中不可以使用
    show2: function () {
      // 函数中使用 super会报错 Uncaught SyntaxError: 'super' keyword unexpected here (at 18.多重继承中super的魅力.html:45:7)
      //super.show();
    }
  };
  xj.show(); //common.showxj 
</script>

</html>